/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.ucase.casemain.service;

import com.icinfo.cloud.provider.punish.dataprocessing.dto.CaseSearchDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.dto.*;
import com.icinfo.cloud.provider.punish.ucase.casemain.model.CaseMainInfo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.*;
import com.icinfo.cloud.provider.punish.uniquery.dto.UniQueryDto;
import com.icinfo.cloud.provider.punish.uniquery.vo.UniQueryWorkTaskColorsVo;
import com.icinfo.cloud.provider.punish.uniquery.vo.UniQueryWorkTaskVo;
import com.icinfo.cloud.workflow.config.model.ConfigWorkFlowDocument;
import com.icinfo.framework.common.web.Result;
import com.icinfo.framework.core.service.BaseService;

import java.util.HashSet;
import java.util.List;

/**
 * 描述: 案件主表-trj case_main_info 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年02月15日
 */
public interface ICaseMainInfoService extends BaseService {

    /**
     * 【V1.0.0】描述：获取案件详情数据
     *
     * @param queryDto {@link CaseDetailInfoQueryDto}
     * @return {@link CaseDetailInfoVo} 案件详情数据
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    CaseDetailInfoVo getCaseDetailInfo(CaseDetailInfoQueryDto queryDto);

    /**
     * 【V1.12.1】描述： 查询简案快办立案登记列表
     *
     * @author: zhengqiang
     * @date: 2023/8/24
     * @param: fastCaseDto
     * @return {@link List< TaskVo>}
     **/
    List<TaskVo> getFastCaseRegisterList(FastCaseQueryDto fastCaseDto);

    /**
     * 描述：校验案件是否处于不可操作状态
     *
     * @param caseMainInfo {@link CaseMainInfoVo}
     * @param caseId       案件id
     * @return boolean 案件是否处于不可操作状态(true-是/false-否)
     * @author xiangyuyu
     * @date 2022-06-01 22:13
     */
    boolean validateCaseIsInNotDealStatus(CaseMainInfoVo caseMainInfo, String caseId);

    /**
     * 描述：校验是否为案件中止状态时进行终止申请表相关操作
     *
     * @param caseMainInfo     {@link CaseMainInfoVo}
     * @param caseId           案件id
     * @param documentKindCode 操作文书种类编码
     * @return boolean 是否为案件中止状态时进行终止申请表相关操作(true-是/false-否)
     * @author xiangyuyu
     * @date 2022-07-14 13:54
     */
    boolean validateIsTerminateCaseWhenBreakOff(CaseMainInfoVo caseMainInfo, String caseId, String documentKindCode);

    /**
     * 描述：校验是否展示当事人选择器
     *
     * @param caseMainInfo {@link CaseMainInfoVo}
     * @param caseId 案件id

     * @return String 是否展示当事人选择器（0-否/1-是）
     * @author xiangyuyu
     * @date 2022-05-27 10:25
     */
    String validateIsShowPartiesSelector(CaseMainInfoVo caseMainInfo,String caseId);

    /**
     * 描述：校验是否需要单独传当事人id
     *
     * @param caseMainInfo {@link CaseMainInfoVo}
     * @param caseId 案件id

     * @return boolean 是否需要单独传当事人id(true-是/false-否)
     * @author xiangyuyu
     * @date 2022-05-27 10:25
     */
    boolean validateIsNeedPassPartyId(CaseMainInfoVo caseMainInfo,String caseId);


    /**
     * 【V1.0.0】描述：获取案件详情-当前阶段可操作的文书列表
     *
     * @param queryDto {@link CaseKeyInfoQueryDto}
     * @return {@link Result<List<CaseDetailOperateDocInfoVo> >} 案件详情-当前阶段可操作的文书列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<CaseDetailOperateDocInfoVo> getCouldBeOperateDocListCurrentStage(CaseKeyInfoQueryDto queryDto);

    /**
     * 【V1.6.0】描述：办结案件-优化版
     *
     * @param caseDto 入参
     * @return List<AllFinishCaseInfoVo>
     * @author tianrunjia
     * @date 2022/11/01
     **/
    List<AllFinishCaseInfoVo> getAllFinishCaseInfoList(CaseQueryDto caseDto);

    /**
     * 【V1.6.0】描述：办结案件、全部待办查询列表-优化版
     *
     * @param caseDto 入参
     * @return List<TaskVo>
     * @author tianrunjia
     * @date 2022/11/01
     **/
    List<AllCaseInfoListVo> getAllCaseInfoList(CaseQueryDto caseDto);

    /**
     * 【V1.0.0】描述：工作台--代办任务列表+全部任务
     * @author lxj
     * @date  2022/2/18
     * @param  caseDto 入参
     * @return List<TaskVo>
     **/
    List<TaskVo> getApproveTaskList(CaseQueryDto caseDto);
    /**
     * 【V1.0.0】描述：颜色统计
     * @author lxj
     * @date  2022/2/22
     * @param  caseDto 入参
     * @return ColorSumVo
     **/
    ColorSumVo getColorStatistics(CaseQueryDto caseDto);

    /**
     * 【V1.0.0】描述：根据案件id查询案件主要信息
     *
     * @param caseId 案件id
     * @return {@link CaseMainInfoVo} 案件主要信息
     * @author xiangyuyu
     * @date 2022-02-22 09:33
     */
    CaseMainInfoVo getCaseMainInfo(String caseId);

    /**
     * 【V1.0.0】描述：公用-根据案件id查询案件阶段流转记录信息（包含文书、附件）
     *
     * @param caseId 案件id
     * @return {@link List<CaseStageFlowRecordInfoVo>} 案件阶段流转记录信息（包含文书、附件）
     * @author xiangyuyu
     * @date 2022-02-22 20:15
     */
    List<CaseStageFlowRecordInfoVo> getCaseStageFlowRecord(String caseId);

    /**
     * 【V1.0.0】描述：公用-根据案件id查询案件简要基础信息
     *
     * @param caseId 案件id
     * @return {@link CaseBasicInfoVo} 案件简要基础信息
     * @author xiangyuyu
     * @date 2022-02-23 10:47
     */
    CaseBasicInfoVo getCaseBasicInfo(String caseId);

    /**
     * 【V1.0.0】描述：获取案件详情-阶段信息
     *
     * @param caseId 案件id
     * @return {@link List< CaseDetailStageInfoVo >} 案件详情-阶段信息
     * @author xiangyuyu
     * @date 2022-02-23 21:37
     */
    List<CaseDetailStageInfoVo> getCaseDetailStageInfo(String caseId);

    /**
     * 判断案件是否为多当事人分别处罚案件
     *
     * @author: zhengqiang
     * @date: 2022/5/18
     * @param: caseId
     * @param: caseMainInfo 案件信息
     * @return {@link boolean}
     **/
    boolean checkCaseIsPartiesPartPunish(String caseId,CaseMainInfoVo caseMainInfo);

    /**
     * 案件主信息更新-流程信息更新
     *
     * @author: tianrunjia
     * @date: 2022/5/18
     * @param: caseId
     **/
    void doModCaseMainInfoWithCaseFlowRoll(CaseMainInfo caseMainInfo);

    /**
     * 【V2.0.0】描述：获取案件当事人子流程信息
     *
     * @param caseId 案件id
     * @return {@link List<PartiesSubFlowInfoVo>} 案件当事人子流程信息
     * @author xiangyuyu
     * @date 2022-05-28 20:08
     */
    List<PartiesSubFlowInfoVo> getPartiesSubFlowInfo(String caseId);

    /**
     * 获取简易处罚详情
     *
     * @author: zhengqiang
     * @date: 2022/6/15
     * @param: queryDto
     * @return {@link CaseDetailSimpleInfoVo}
     **/
    CaseDetailSimpleInfoVo getCaseDetailSimpleInfo(CaseDetailInfoQueryDto queryDto);

    /**
     * 【V1.3.0】描述：案件撤回某个处置环节操作
     *
     * @param caseId 案件id,caseLinkCode 环节编码
     * @author tianrunjia
     * @date 2022-06-24
     */
    void doRecallCaseHandleLink(String caseId, String caseLinkCode);

    /**
     * 【V1.11.3】描述： 退回调查取证
     *
     * @author: zhengqiang
     * @date: 2023/4/10
     * @param: caseId
     * @return
     **/
    void doRecallToInvestigation(String caseId);

    /**
     * 根据案件阶段获取对应文书
     * @author liyafeng
     * @date 2022/8/3
      * @param queryDto
     * @return {@link CaseStageDocumentInfoVo}
     */
    List<CaseStageDocumentInfoVo> getCaseStageDocumentInfo(CaseStageDocumentQueryDto queryDto);
    /**
     *根据获取案件对应的送达及地址确认书编码
     * @author liyafeng
     * @date 2022/8/4
      * @param caseId
     * @return {@link String}
     */
    String getCaseSendinfoConfirmCatalogCode(String caseId);

    /**
     * 【V1.4.1】描述：案件按环节操作所需信息获取
     * @author tianrunjia
     * @date 2022-08-26
     */
    CaseDetailOperateDocInfoVo doGetCaseLinkOperateBusiInfo(CaseLinkOperateBusiInfoQueryDto queryDto);

    /**
     * 【V1.4.1】描述：案件详情左边案件目录查询
     *
     * @param caseId 案件id
     * @author tianrunjia
     * @date 2022-08-27
     */
    List<CaseDocumentCatalogChainInfoVo> doGetCaseDocumentCatalogChainInfos(String caseId);

    /**
     * 描述： 工作台--代办任务列表+全部任务(新)
     *
     * @author: zhengqiang
     * @date: 2022/10/12
     * @param: caseDto
     * @return {@link List< TaskVo>}
     **/
    List<TaskVo> getApproveTaskListNew(CaseQueryDto caseDto);

    /**
     * 描述： 颜色统计(新)
     *
     * @author: zhengqiang
     * @date: 2022/10/12
     * @param: caseDto
     * @return {@link ColorSumVo}
     **/
    ColorSumVo getColorStatisticsNew(CaseQueryDto caseDto);

    /**
     * 描述： 推送案件信息至外部系统
     *
     * @author: zhengqiang
     * @date: 2022/10/20
     * @param: caseId
     * @return
     **/
    void pushCaseToOutSys(String caseId);
    /**
     * 查询待督查任务列表(查询办案中的案件)
     * @param: [queryDto]
     * @return: List<WaitingSupervisedTaskVo>
     * @Author: wuzhihui
     * @Date: 2022/12/01
     */
    List<WaitingSupervisedTaskVo> getWaitingSupervisedTaskList(WaitingSupervisedTaskQueryDto queryDto);
    /**
     * 查询待督查任务信息(查询办案中的案件)
     * @param: caseId
     * @return: List<WaitingSupervisedTaskVo>
     * @Author: wuzhihui
     * @Date: 2022/12/01
     */
    WaitingSupervisedTaskDetailVo getWaitingSupervisedTask(String caseId);
    /**
     * getWaitingSupervisedTask
     * @param: [caseId]
     * @return: java.util.List<java.lang.String>
     * @Author: wuzhihui
     * @Date: 2022/12/02
     */
    HashSet<String> getWaitingSupervisedRelUserIdList(String caseId);

    /**
     * 描述：统一案件分页查询列表
     * @author yehuafei
     * @date 2022-12-05
     */
    List<CaseInfoPageResponse> getCaseInfoList(CaseInfoPageRequest request);

    /**
     * 描述：统一案件详情
     * @author yehuafei
     * @date 2022-12-05
     */
    CaseInfoDetailResponse getCaseInfoDetail(String id);

    /**
     * 描述：统一案件详情  历史行政处罚记录
     * @author yehuafei
     * @date 2022-12-05
     */
    List<CaseInformHisXZCFRecord> getCaseInformHisXZCFRecord(CaseInformHisXZCFRecordRequest request);

    /**
     * 【V1.0.0】描述：根据案件id获取加处罚款决定书填充信息
     *
     * @param caseId 案件id
     * @author yehuafei
     * @date 2022-12-13 09:33
     */
    JCFKJDSDocData getJCFKJDSDocData(String caseId,String partyId);

    /**
     * 获取关联案件列表
     *
     * @param queryNameDto 请求对象
     * @return 关联案件列表
     * @author lilihao
     * @date 2022/12/4 21:11
     */
    List<CaseInfoQueryVo> getRelCaseList(CaseInfoQueryNameDto queryNameDto);

    /**
     * 描述：统一案件分页查询统计
     * @author yehuafei
     * @date 2022-12-05
     */
    CaseInfoPageResponseStatistics getCaseInfoStatistics();

    /**
     * 描述：统一案件颜色查询统计
     * @author yehuafei
     * @date 2022-12-05
     */
    CaseInfoPageColorResponseStatistics getCaseInfoPageColorStatistics();

    /**
     * 获取案件信息
     * @param  searchDto 查询对象
     * @return 案件信息
     * @author lilihao
     * @date 2023/2/6 18:49
     */
    List<CaseMainInfo> getCaseInfo(CaseSearchDto searchDto);

    /**
     * 删除案件信息
     * @param caseId 案件唯一标识
     * @return
     * @author lilihao
     * @date 2023/2/8 1:03
     */
    int delCaseInfo(String caseId);

    /**
     * 描述：获取案件阶段文书列表（app端展示）
     *
     * @param caseId 案件id
     * @return {@link List<CaseDocumentCatalogChainInfoVo> }
     * @author shishengyao
     * @date 2023/03/01
     */
    List<CaseDocumentCatalogChainInfoVo> getCaseDocumentCatalogChainInfosForApp(String caseId);


    /**
     * 【V1.11.1】描述： 工作台--待办任务
     *
     * @author: tianrunjia
     * @date: 2023-03-06
     **/
    List<UniQueryWorkTaskVo> getWorkWaitTaskList(UniQueryDto uniQueryDto);

    /**
     * 【V1.11.1】描述： 工作台--待办任务颜色
     *
     * @author: tianrunjia
     * @date: 2023-03-06
     **/
    UniQueryWorkTaskColorsVo getWorkWaitTaskListColors(UniQueryDto uniQueryDto);

    /**
     * 【V1.11.1】描述：获取当前阶段案件可操作文书信息
     *
     * @param caseId 用例id
     * @param isMobile
     * @return {@link CaseStageOperateDocumentVo }
     * @author shishengyao
     * @date 2023/03/09
     */
    CaseStageOperateDocumentVo getCaseStageOperateDocument(String caseId, String isMobile);
    /**
     * 件主表时效颜色定时初始化
     * @author liyafeng
     * @date 2023/4/12
      * @param
     * @return
     */
    void initCaseTimeColor();

    /**
     * 设置参数的公共方法
     *
     * @param busiParamId
     * @param caseMainInfo
     * @param caseId
     * @param documentTypeName
     * @param casePartiesReasonType
     * @param caseParties
     * @param isLateFee
     * @param configWorkFlowDocumentList
     * @param caseDetailOperateDocInfoVoList
     * @param roleIdList
     */
    void setData(String busiParamId, CaseMainInfoVo caseMainInfo, String caseId, String documentTypeName, String casePartiesReasonType, List<CasePartiesRecordVo> caseParties, String isLateFee, List<ConfigWorkFlowDocument> configWorkFlowDocumentList, List<CaseDetailOperateDocInfoVo> caseDetailOperateDocInfoVoList, List<String> roleIdList);


    /**
     * 限制区划查询
     * @param areaCode 区域码
     * @return 下级code集合
     */
    List<String> limitArea(String areaCode);
}
